﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for GeneradorBD
/// </summary>
/// 
namespace DEVOS.Generador
{
    public abstract class GeneradorBD
    {
        public static String Generar(String tipo, String nombreTabla, List<String> campos)
        {
            String resultado = null;
            if (tipo.Equals(String.Empty))
            {
                resultado = String.Empty;
            }
            else if (tipo.ToUpper().Equals("SELECT"))
            {
                resultado = GeneradorBD.GenerarSelect(nombreTabla, campos);
            }
            else if (tipo.ToUpper().Equals("INSERT"))
            {
                resultado = GeneradorBD.GenerarInsert(nombreTabla, campos);
            }
            else if (tipo.ToUpper().Equals("UPDATE"))
            {
                resultado = GeneradorBD.GenerarUpdate(nombreTabla, campos);
            }
            else if (tipo.ToUpper().Equals("DELETE"))
            {
                resultado = GeneradorBD.GenerarDelete(nombreTabla, campos);
            }
            return resultado;
        }

        private static String GenerarSelect(String nombreTabla, List<String> campos)
        {
            String resultado;
            String cadenaCampos = String.Empty;

            for (int i = 0; i < campos.Count - 1; i++)
            {
                cadenaCampos += String.Format("\t{0},\n", campos[i]);
            }
            if (campos.Count > 0)
                cadenaCampos += String.Format("\t{0}\n", campos[campos.Count - 1]);
            else
                cadenaCampos = String.Format("\t{0}\n", "*");

            resultado = String.Format("SELECT\n{1}FROM\n\t{0};", nombreTabla, cadenaCampos);
            return resultado;
        }

        private static String GenerarInsert(String nombreTabla, List<String> campos)
        {
            String resultado;
            String cadenaCampos = String.Empty;
            String cadenaParametros = String.Empty;

            for (int i = 0; i < campos.Count - 1; i++)
            {
                cadenaCampos += String.Format("{0}, ", campos[i]);
            }


            for (int i = 0; i < campos.Count - 1; i++)
            {
                cadenaParametros += String.Format("[{0}], ", campos[i]);
            }
            if (campos.Count > 0)
            {
                cadenaCampos += campos[campos.Count - 1];
                cadenaParametros += String.Format("[{0}]", campos[campos.Count - 1]);
                resultado = String.Format("INSERT INTO\n\t{0}({1})\n\tVALUES({2});", nombreTabla, cadenaCampos, cadenaParametros);
            }else
                resultado = "";
            

            
            return resultado;
        }

        private static String GenerarUpdate(String nombreTabla, List<String> campos)
        {
            String resultado;
            String cadenaCampos = String.Empty;

            for (int i = 0; i < campos.Count - 1; i++)
            {
                cadenaCampos += String.Format("\t{0}=[{0}],\n", campos[i]);
            }
            if (campos.Count > 0)
            {
                cadenaCampos += String.Format("\t{0}=[{0}]\n", campos[campos.Count - 1]);
                resultado = String.Format("UPDATE\n\t{0}\nSET\n{1};", nombreTabla, cadenaCampos);
            }
            else
                resultado = "";

            
            return resultado;
        }

        private static String GenerarDelete(String nombreTabla, List<String> campos)
        {
            String resultado;
            String cadenaCampos = String.Empty;

            for (int i = 0; i < campos.Count - 1; i++)
            {
                cadenaCampos += String.Format("\t{0}=[{0}],\n", campos[i]);
            }
            if (campos.Count > 0)
            {
                cadenaCampos += String.Format("\t{0}=[{0}]\n", campos[campos.Count - 1]);
                resultado = String.Format("DELETE FROM\n\t{0}\nWHERE\n{1};", nombreTabla, cadenaCampos);
            }
            else
                resultado = "";

            return resultado;
        }
    }
}
